# 1.连接数据库
import pymysql

conn = pymysql.connect(
    host='localhost',
    user='root',
    password='root',
    db='python_test',
    charset='utf8',
    port=3306,
    autocommit=True  # 如果插入数据是否自动提交？和conn.commit()功能一致
)
# ***python，必须有一个游标对象，用来给数据库发送Sql的，并执行的
# 2.创建游标对象
cur = conn.cursor()
# 3.对于数据库进行增删查改
# 3.1） *****************创建数据库表*******************
try:
    create_sql = "create table if not exists conn_test (id int,name varchar(50));"
    cur.execute(create_sql)
except Exception as e:  # 执行失败时，发生异常时，执行此分支
    print("创建数据库表失败：", e)
else:  # 执行成功时，没有发生异常时，执行此分支
    print("创建数据库表成功")
finally:  # 无论执行失败还是成功，都执行此分支
    print("")
# 3.2)*******************插入数据*********************
try:
    insert_sql = "insert into conn_test (id,name) values (1,'张三');"
    cur.execute(insert_sql)
except Exception as e:
    print("数据插入失败", e)
else:
    print("数据插入成功")
# 3.3）******************插入多条数据*******************
try:
    info = [(i, "westos%s" %(i)) for i in range(100)]
    # *********************第一种方式********************
    # %s必须手动添加一个字符串， 否则就是一个变量名， 会报错.
    insert_sqli = "insert into conn_test (id,name) values (%d, '%s');"
    for item in info:
        print('insert语句:', insert_sqli %item)
        cur.execute(insert_sqli %item)

     # *********************第二种方式********************
    insert_sqli = "insert into conn_test (id,name) values(%s, %s);"
    cur.executemany(insert_sqli, info)
except Exception as e:
    print("批量插入失败")
else:
    print("批量插入成功")
# 4.数据库查询
query_sql = "select * from conn_test"
result = cur.execute(query_sql)  # 默认不返回查询结果集，返回数据记录数
print(result)
print(cur.fetchone())  # 1)获取下一个查询结果集
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchone())
print(cur.fetchmany(4))  # 获取指定数量的查询结果集
info = cur.fetchall()  # 获取全部查询结果集
print(len(info))
print(cur.rowcount)  # 返回执行Sql语句影响的行数
# 5.移动游标指针
print(cur.fetchmany(3))
print("正在移动指针到最开始")
cur.scroll(0, 'absolute')
print((cur.fetchall()))  # 移动到最后
cur.scroll(-2, 'relative')  # 相对当前位置前移两位
print(cur.fetchall())
# 6.关闭游标
cur.close()
# 关闭连接
conn.close()





